/**
 * log4js日志配置模块
 * 提供统一的日志配置和日志实例获取功能
 */
import log4js from 'log4js';
import fs from 'fs';

/**
 * 初始化日志系统
 * 确保日志目录存在并配置log4js
 */
const initLogger = () => {
  // 确保日志目录存在
  const logDir = 'logs';
  if (!fs.existsSync(logDir)) {
    fs.mkdirSync(logDir, { recursive: true });
  }

  // 配置log4js
  log4js.configure({
    appenders: {
      console: { 
        type: 'console',
        layout: {
          type: 'pattern',
          pattern: '%[[%d{yyyy-MM-dd hh:mm:ss.SSS}] [%p] [%c]%] - %m'
        }
      },
      file: { 
        type: 'file', 
        filename: 'logs/application.log',
        maxLogSize: 10485760, // 10MB
        backups: 3,
        compress: true,
        layout: {
          type: 'pattern',
          pattern: '[%d{yyyy-MM-dd hh:mm:ss.SSS}] [%p] [%c] - %m'
        }
      },
      error: {
        type: 'file',
        filename: 'logs/error.log',
        maxLogSize: 10485760, // 10MB
        backups: 3,
        compress: true,
        layout: {
          type: 'pattern',
          pattern: '[%d{yyyy-MM-dd hh:mm:ss.SSS}] [%p] [%c] - %m'
        }
      }
    },
    categories: {
      default: { appenders: ['console', 'file'], level: 'info' },
      error: { appenders: ['console', 'error'], level: 'error' },
      extractAudio: { appenders: ['console', 'file'], level: 'debug' },
      detection: { appenders: ['console', 'file'], level: 'info' }
    }
  });
};

/**
 * 获取指定类别的日志记录器
 * @param {string} category - 日志类别名称，对应log4js配置中的categories
 * @returns {Object} - 日志记录器实例
 */
const getLogger = (category = 'default') => {
  return log4js.getLogger(category);
};

/**
 * 获取错误日志记录器
 * @returns {Object} - 错误日志记录器实例
 */
const getErrorLogger = () => {
  return log4js.getLogger('error');
};

/**
 * 关闭日志系统
 * 在应用程序结束时调用，确保所有日志都被写入
 */
const shutdownLogger = () => {
  return log4js.shutdown();
};

// 初始化日志系统
initLogger();

export {
  getLogger,
  getErrorLogger,
  shutdownLogger
};